package com.jinsi.service.impl;

import com.jinsi.mapper.MenuMapper;
import com.jinsi.pojo.MenuData;
import com.jinsi.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class MenuServiceImpl implements MenuService {
    @Autowired
    private MenuMapper mapper;

    @Override
    public List<MenuData> getParentMeun() {
        //获取所有的菜单(包括子菜单和父级菜单)
        List<MenuData> list = mapper.getParentMeun();
        //创建一个集合用于保存所有的主菜单
        List<MenuData> rootMeun = new ArrayList<>();
        //遍历所有菜单集合,如果是主菜单的话直接放入rootMeun集合
        for (MenuData i : list){
            //判断为0是因为我的主菜单标识是0
            if (i.getParentId() == 0){
                rootMeun.add(i);
            }
        }


        //这个是遍历所有主菜单,分别获取所有主菜单的所有子菜单
        for (MenuData i : rootMeun){
            //获取所有子菜单 递归
            List<MenuData> childrenList = getchildrenMeun(i.getId(),list);
            //这个是实体类中的子菜单集合
            i.setChild(childrenList);
        }
        return rootMeun;

    }

    @Override
    public List<MenuData> getchildrenMeun(int id, List<MenuData> allMeun) {
        //用于保存子菜单
        List<MenuData> childrenList = new ArrayList<>();
        for (MenuData i: allMeun){
            //判断当前的菜单标识是否等于主菜单的id
            if(i.getParentId() == id){
                //如果是的话 就放入主菜单对象的子菜单集合
                childrenList.add(i);
            }
        }

        //这里就是递归了，遍历所有的子菜单
        for (MenuData i:childrenList){
            i.setChild(getchildrenMeun(i.getId(),allMeun));
        }

        //如果子菜单为空的话，那就说明某菜单下没有子菜单了，直接返回空,子菜单为空的话就不会继续
        //迭代了
        if(childrenList!=null && childrenList.size()==0){
            return null;
        }
        return  childrenList;

    }

}
